package com.note.feng.leetcode.algorithms.easy.tree;

public class Hundred {

    /**
     * 100 相同的树
     * 给你两棵二叉树的根节点 p 和 q ，编写一个函数来检验这两棵树是否相同。
     *
     * 如果两个树在结构上相同，并且节点具有相同的值，则认为它们是相同的。
     *
     * 示例 1：
     *
     * 输入：p = [1,2,3], q = [1,2,3]
     * 输出：true
     * 示例 2：
     *
     * 输入：p = [1,2], q = [1,null,2]
     * 输出：false
     * 示例 3：
     *
     * 输入：p = [1,2,1], q = [1,1,2]
     * 输出：false
     *  
     * 提示：
     *
     * 两棵树上的节点数目都在范围 [0, 100] 内
     * -104 <= Node.val <= 104
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/same-tree
     */
    /**
     *解法：
     * 递归遍历：
     * 边界条件：
     * 1、两个node结点都为空，return true;
     * 2、只有一个node结点为空，return false;
     * 3、两个node结点都不为空，val值不同，return false;
     * @param p
     * @param q
     * @return
     */
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p == null && q == null){
            return true;
        }
        if(p == null || q == null){
            return false;
        }
        if(p.val != q.val){
            return false;
        }
        return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
    }
    public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode() {}
      TreeNode(int val) { this.val = val; }
      TreeNode(int val, TreeNode left, TreeNode right) {
          this.val = val;
          this.left = left;
          this.right = right;
      }
    }
}
